package main
import "fmt"

/**
变量(实例)具有多种形态。面向对象的第三大特征，
在Go语言，多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。
*/

type User interface {
	sayHello()
}

type Chinese struct {
	Name string
}

func (c Chinese) sayHello() {
	fmt.Println("hello, I am Chinese")
}

type American struct {
	Name string
}
func (a American) sayHello() {
	fmt.Println("hello, I am American")
}

// 定义一个函数：接收具备user接口的参数
// 这是一个多态方法 : 多态参数
func test(u User) {
	u.sayHello()
}
func main() {
	var c Chinese
	var a American
	test(c)
	test(a)

	// 多态数组
	var u [3]User
	u[0] = Chinese{"张三"}
	u[1] = Chinese{"李四"}
	u[2] = American{"美国"}
	fmt.Println(u)
}